草庐IT

c - PsSetCreateProcessNotifyRoutine 回调

全部标签

c++ - C 回调中的 try{ } catch(...) { } - 坏主意?

我正在用C++实现回调,它将从普通C代码中调用。我的main()函数已经是C++,但C代码将负责创建最终会调用我的回调的线程。现在我的回调看起来像inthandle_foo(void*userdata){try{MyCPPClass*obj=static_cast(userdata);obj->doStuff();return0;//noerror}catch(...){LogError("doStufffailed");return-1;//error}}这工作正常,但对我来说似乎很奇怪。此外,我失去了一些有用的功能,例如找出what被抛出的能力(无需为我的每个回调添加大量额外的ca

c++ - 用 C++11 接口(interface)包装 C 回调的最佳方法是什么?

假设这是一个要包装的C函数:voidfoo(int(__stdcall*callback)());C函数指针回调的两个主要缺陷是:无法存储绑定(bind)表达式无法存储捕获的lambdas我想知道包装此类函数的最佳方法。第一个对于成员函数回调特别有用,第二个对于使用周围变量的内联定义特别有用,但这些并不是唯一的用途。这些特定函数指针的另一个属性是它们需要使用__stdcall调用约定。据我所知,这完全消除了lambdas作为一个选项,否则有点麻烦。我也想至少允许__cdecl。这是我能想到的最好的方法,而不会开始转向依赖函数指针所没有的支持。它通常在标题中。以下是Coliru上的示例.

c++ - 带/不带类的回调函数指针 C++

我卡住了。我正在尝试形成一个函数,它将吃掉无类函数指针和对象中的指针。这是我当前的代码,希望能解释更多。(它应该在Arduino上运行,所以我不能使用大型库。)首先,我将这个库用于Arduino:/*SimpleTimer-AtimerlibraryforArduino.*Author:mromani@ottotecnica.com*Copyright(c)2010OTTOTECNICAItaly*/它采用在这种类型的设置计时器间隔上调用的函数:typedefvoid(*timer_callback)(void);据我所知,这是一个类函数,网页Pointerstomemberfunct

c++ - 如何在 C++ 中实现回调?

我想在C++中实现一个具有回调的类。所以我想我需要一个有2个参数的方法:目标对象。(假设*myObj)指向成员函数的指针目标对象。(所以我可以*myObj->memberFunc();)条件是:myObj可以来自任何类。将成为回调函数的成员函数是非静态的。我一直在阅读这方面的内容,但似乎我需要事先了解myObj的类。但我不知道该怎么做。我该如何处理?这在C++中可行吗?这是我的想法,但肯定是不正确的。classMyClassWithCallback{publicvoid*targetObj;void(*callback)(intnumber);voidsetCallback(void*

c++ - std::function 作为回调,是否可以注销?

这个问题完全是关于std::function而不是boost::function.有关详细信息,请参阅此问题底部的更新部分,尤其是关于无法比较非空std::function的部分符合C++11标准的对象。C++11std::function类模板非常适合维护回调集合。可以将它们存储在vector,例如并在需要时调用它们。然而,维护这些对象并允许注销似乎是不可能的。让我具体一点,想象一下这个类:classInvoker{public:voidRegister(std::functionf);voidUnregister(std::functionf);voidInvokeAll();pr

c++ - 关于回调函数和线程的一般查询

我有一个关于线程和回调的一般性问题。例如,我们有一个线程与主程序一起连续运行。主程序已经向线程注册了一个回调函数。所以线程可以随时调用回调函数。通常,我们通过将函数指针传递给线程来注册回调。我想知道线程何时调用该回调函数,它是该线程的一部分还是主程序的一部分。我想知道这个过程的机制,比如当线程调用回调时,主程序执行是如何停止或中断的。另一件事是调用回调时函数调用堆栈的行为。 最佳答案 作为一般规则,函数调用总是在调用者的上下文(线程)中进行。被调用者是函数、成员函数、仿函数对象还是其他任何东西都没有关系。换句话说,当线程调用你的回调

c++ - 在 C++ 中传递回调函数参数的最佳方法

在C++中传递回调函数参数的最佳方式是什么?我想简单地使用模板,像这样:templatevoidDoSomething(Functioncallback)这是使用的方式,例如在std::sort用于比较函数对象。使用&&传递怎么样?例如:templatevoidDoSomething(Function&&callback)这两种方法的优缺点是什么,为什么STL使用前者,例如在std::sort? 最佳答案 templatevoidDoSomething(Function&&callback)…它使用forwardingreferen

c++ - C-回调函数模板 : explicitly instantiate template

前提我正在使用一个提供以下接口(interface)的C库(来自C++):voidregister_callback(void*f,void*data);voidinvoke_callback();问题现在,我需要将函数模板注册为回调,这给我带来了问题。考虑以下代码:templatevoidmy_callback(void*data){…}intmain(){intft=42;register_callback(reinterpret_cast(&my_callback),&ft);invoke_callback();}这给了我以下链接器错误(在OSX上使用g++(GCC)4.5.1但

c++ - 如何使用 std::function 作为 C 风格的回调

如何在需要C风格回调的函数中使用std::function?如果这是不可能的,那么下一个最好的事情是什么?例子://---someCcodeIcannotchange---typedefvoid(*fun)(int);voidregister_callback(funf){f(42);//atest}//------------------------------------#include#includevoidfoo(constchar*ptr,intv,floatx){std::coutmyf=std::bind(&foo,"test",std::placeholders::_1

c++ - 如何使用 C++ 成员函数作为 C 框架的回调函数

有一个支持回调函数类型的C库(我无法更改)void(*callback)(void*appContext,inteventid)我想设置一个C++函数作为回调。具体我有以下问题?是否需要在"externC"block下声明回调函数?成员函数是否必须是静态的才能成为回调函数?是否可以使用非静态成员函数?如果是,如何?什么时候推荐使用非静态成员函数?函数是否是模板函数有关系吗?非类C风格的函数比类成员函数有什么优势吗?我正在旧的VC++编译器上尝试这些变体,它不支持最新的C++标准。但是代码需要独立于平台,并且应该适用于大多数C++编译器。我想知道回调的推荐做法是什么?